Carto statique

Author

C. Grasland

Code
# Options générales
library(knitr)
knitr::opts_chunk$set(echo = TRUE, 
                      warning= FALSE, 
                      message = FALSE, 
                      error=FALSE)

# Selection de packages tidyverse
library(dplyr,quietly = T,warn.conflicts = F,verbose = F)
#library(tidyr,quietly = T,warn.conflicts = F,verbose = F)
library(ggplot2,quietly = T,warn.conflicts = F,verbose = F)

# packages de cartographie
library(sf,quietly = T, verbose=F)
Linking to GEOS 3.11.0, GDAL 3.5.3, PROJ 9.1.0; sf_use_s2() is TRUE
Code
library(mapsf,quietly = T, verbose=F)

# Packages d'enquête
#library(xtable)
#library(survey)
#library(questionr)

Le package map_sf

Le package mapsf permet de réaliser des cartes statiques de très haute qualité. Il a en effet été mis au point par des cartographes et des géomaticiens professionnels de l’UMS RIATE. Il prend la suite du package cartography dont la maintenance demeurera assuré quelque temps encore mais ne fera plus l’objet de développements futurs. Le package mapsf présente l’avantage d’être totalement compatibvle avec le package sf ce qui n’était pas autant le cas pour le package cartography, plus ancien, et créé pour être compatible avec l’ancien package sp.

On trouvera la documentation du package mapsf à l’adresse suivante :

https://riatelab.github.io/mapsf/index.html

Création d’un template cartographique

Nous allons dans un premier temps apprendre à créer un fonds de carte vierge mais comportant tout l’habillage nécessaire (“template”). Pour cela nous allons charger différentes couches cartographiques correspondant respectivement aux communes, aux arrondissements et aux iris :

Code
map_iris<-readRDS("res/map_iris.RDS")
map_com <-readRDS("res/map_com.RDS")
map_arr <-readRDS("res/map_arr.RDS")

map_iris_hlm<-readRDS("res/map_iris_hlm.RDS")

tracé d’un fonds de carte vierge

La fonction mf_map() avec le paramètre type = "base"permet de tracer une carte vide

Code
 mf_map(map_iris, type = "base")

Superposition de couches

On peut toutefois ajouter toute une série de paramètres supplémentaire (col=, border=, lwd=, …) et superposer plusieurs fonds de carte avec le paramètre add = TRUE. L’ajout de la fonction layout permet de rajouter un cadre une légende.

programme

Code
# Trace les Iris avec des paramètres
mf_map(map_iris,  type = "base", 
       col = "lightyellow", border="gray50",lwd=0.3)
# Ajoute les contours des arrondissements
mf_map(map_arr,  type = "base", 
       col = NA,border="red",lwd=0.5,
       add = TRUE)
# Ajoute les contours des département
mf_map(map_com,  type = "base", 
       col = NA,border="red",lwd=1,
       add = TRUE)
# Ajoute un cadre, un titre et des sources
mf_layout(title = "Marseille", 
          credits = "Sources : IGN et INSEE")

Ajout d’un thème

On peut finalement modifier l’ensemble de la carte en lui ajoutant une instruction mf_theme() qui peut reprendre des styles existants ( “default”, “brutal”, “ink”, “dark”, “agolalight”, “candy”, “darkula”, “iceberg”, “green”, “nevermind”, “jsk”, “barcelona”) mais aussi créer ses propres thèmes

programme

Code
#Choix du thème
mf_theme("darkula")
# Trace les Iris avec des paramètres
mf_map(map_iris,  type = "base",
       border="white",
        lwd=0.3)
# Ajoute les contours des arrondissements
mf_map(map_arr,  type = "base", 
       col = NA, lwd=1,
       add = TRUE)
# Ajoute les contours des communes
mf_map(map_com,  type = "base", 
       col = NA, lwd=2,
       add = TRUE)
# Ajoute un cadre, un titre et des sources
mf_layout(title = "Marseille", 
          credits = "Sources : IGN et INSEE")

Ajout de texte

On peut ajouter une couche de texte avec la fonction mf_label(). Par exemple, on va ajouter à la carte précédente le code insee des communes

résultat

Code
mf_theme("agolalight")

# Trace les Iris avec des paramètres
mf_map(map_iris, 
       type = "base", 
       col = "lightyellow",
       border="gray80",
       lwd=0.3)

# Ajoute les contours des arrondissements
mf_map(map_arr, 
       type = "base", 
       col = NA,
       border="red",
       lwd=1,
       add = TRUE)

# Ajoute les contours des communes
mf_map(map_com,  type = "base", 
       col = NA,border="red",lwd=2,
       add = TRUE)

# Ajoute les codes des arrondissements
map_arr$num<-substr(map_arr$NOM_COM,10,13)
mf_label(map_arr, 
         var="num",
         cex=0.7, 
         col="blue",
         overlap = FALSE)

# Ajoute un cadre, un titre et des sources
mf_layout(title = "Arrondissements et Iris de Marseille en 2020", 
          frame = TRUE,
          credits = "Sources : IGN et INSEE")

Carte de stock

Une carte de stock représente la localisation de quantités que l’on peut aditionner et dont le total a un sens. Par exemple un nombre d’habitants, un nombre de ménages, un nombre d’automobiles. Ce quantités doivent être représentées par des figures (cercles, carrés, …) dont la surface est proportionelle au stock afin que l’oeil du lecteur puisse les aditionner visuellement.

Dans le package mapsf, on réalise ce type de carte à l’aide de la fonction mf_map()en lui donnant le paramètre type="prop".

On va tenter à titre d’exemple de représenter la distribution du nombre de ménages ordinaires occupant un logement HLM par IRIS :

Carte de stock minimale

Code
# Trace les contours des communes
mf_map(x= map_iris, 
       type = "base")

# Ajoute le nombre de ménages par IRIS
mf_map(x =map_iris_hlm, 
      type ="prop",
      var = "HLM_1",
      add=TRUE)

Mais le résultat est peu satisfaisant car les cercles sont trop grands. Il faut en pratique toujours effectuer un réglage de ceux-ci avec l’instruction inches=

Carte de stock habillée

Code
mf_theme("agolalight")
mf_map(map_iris, type = "base",  
       col = "lightyellow",border="gray80", lwd=0.3)
mf_map(map_arr, type = "base", 
       col = NA,border="black",lwd=1,add = TRUE)

mf_map(map_iris_hlm, var = "HLM_1",type = "prop",
  inches = 0.05, col = "red",leg_pos = "left",  
  leg_title = "Nombre de ménages", add=TRUE)

mf_layout(title = "Distribution des logements HLM en 2020", 
          frame = TRUE,
          credits = "Sources : IGN et INSEE")

Carte choroplèthe

Une carte choroplèthe ou d’intensité représente un phénomène relatif dont la somme n’a pas de sens. Par exemple, il serait absurde d’aditionner les % de logement HLM des IRIS du Val de Marne. Ces variables d’intensité caractèrisent donc l’état général d’une zone (choros) et elles vont être représentées par une couleur appliquée à toute la surface de la zone, d’où leur nom de cartes choroplèthes.

La fonction du package mapsf adaptée aux variables d’intensité est la fonction mf_map()munie du paramètre type = "choro".

On va prendre l’exemple de la part des ménages qui résident en HLM

Carte choroplèthe minimale

Si on ne précise rien, la carte est réalisée à l’aide de la palette par défaut avec un découpage des classes en quantiles (effectifs égaux).

programme

Code
# Carte choroplèthe
mf_map(
  x = map_iris_hlm, 
  var = "HLM_pct",
  type = "choro")

Carte choroplèthe habillée

On peut arriver à une carte beaucoup plus satisfaisante en contrôlant l’ensemble des paramètres de couleur et de découpage des classes. Puis en superposant les contours de communes au dessus de la carte des IRIS pour faciliter le repérage.

programme

Code
mybreaks = c(0, 10,20,30,40,50,
             60,70,80,90, 100)
mypal <- mf_get_pal(n = 10, 
                    pal = "Reds",rev = T)
# Carte choroplèthe des iris
mf_map( map_iris_hlm, var = "HLM_pct",
        type = "choro",
        breaks = mybreaks,pal = mypal, 
        border=NA,
       col_na = "gray80",leg_title = "% HLM",
       leg_val_rnd = 0)
# Contour des arrondissements et cadre
mf_map(map_arr, type = "base", col = NA,
       border="black",lwd=1,add = TRUE)
mf_layout(title = "% de ménages en HLM au RP  2020", 
          frame = TRUE,
          credits = "Sources : IGN et INSEE")

Carte stock + choroplèthe (1)

On peut combiner les deux modes cartographiques par superposition :

Carte stock + choroplèthe

Mais les cercles dissimuent alors les plages de couleur, aussi on peut utiliser le type prop_choro qui place la variable choroplèthe à l’intérieur des cercles

Code
mf_theme("agolalight")
mybreaks = c(0, 10,20,30,40,50,60,70,80,90, 100)
mypal <- mf_get_pal(n = 10, pal = "Reds", rev=T)
mf_map(map_iris_hlm, type = "base",  
       col = "gray80",border="white", lwd=0.3)
mf_map(map_arr, type = "base", 
       col = NA,border="white",lwd=1,add = TRUE)
mf_prop_choro( x = map_iris_hlm,  var = c("TOT", "HLM_pct"), 
  inches = 0.06, col_na = "grey", pal=mypal,
  breaks = mybreaks, nbreaks = 4, lwd = 0.1,
  leg_pos = c("right", "left"),leg_val_rnd = c(0,0),
  leg_title = c("nb. ménages", "% HLM"),
  add = TRUE)
mf_layout(title = "Les ménages ordinaires en HLM  2020", 
          frame = TRUE, credits = "Sources : IGN et INSEE")